package com.example.shiro.common.config;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * @auther 严旭平
 * @date 2020/4/818:26
 * @Description 1.修改自定义转换器，避免返回NULL
 * 2.放开静态资源拦截配置
 */

//@Configuration
//public class WebConfigurer extends WebMvcConfigurationSupport {

//    /**
//     * 修改自定义消息转换器（解决所有空对象返回的问题）
//     *
//     * @param converters 注意：其中在 config.setSerializerFeatures还可以添加以下配置
//     *                   WriteNullListAsEmpty  ：List字段如果为null,输出为[],而非null
//     *                   WriteNullStringAsEmpty ： 字符类型字段如果为null,输出为"",而非null
//     *                   DisableCircularReferenceDetect ：消除对同一对象循环引用的问题，默认为false（如果不配置有可能会进入死循环）
//     *                   WriteNullBooleanAsFalse：Boolean字段如果为null,输出为false,而非null
//     *                   WriteMapNullValue：是否输出值为null的字段,默认为false
//     */
//    @Override
//    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//        FastJsonHttpMessageConverter4 converter = new FastJsonHttpMessageConverter4();
//        converter.setSupportedMediaTypes(getSupportedMediaTypes());
//        FastJsonConfig config = new FastJsonConfig();
//        config.setSerializerFeatures(
//                // String null -> ""
//                SerializerFeature.WriteNullStringAsEmpty,
//                // Number null -> 0
//                SerializerFeature.WriteNullNumberAsZero,
//                //禁止循环引用
//                SerializerFeature.DisableCircularReferenceDetect,
////                List字段如果为null,输出为[],而非null
//                SerializerFeature.WriteNullListAsEmpty,
////                Boolean字段如果为null,输出为false,而非null
//                SerializerFeature.WriteNullBooleanAsFalse
//        );
//        converter.setFastJsonConfig(config);
//        converter.setDefaultCharset(Charset.forName("UTF-8"));
//        converters.add(converter);
//    }
//
//    private List<MediaType> getSupportedMediaTypes() {
//        List<MediaType> supportedMediaTypes = new ArrayList<>();
//        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
//        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
//        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
//        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
//        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
//        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
//        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
//        supportedMediaTypes.add(MediaType.APPLICATION_XML);
//        supportedMediaTypes.add(MediaType.IMAGE_GIF);
//        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
//        supportedMediaTypes.add(MediaType.IMAGE_PNG);
//        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
//        supportedMediaTypes.add(MediaType.TEXT_HTML);
//        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
//        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
//        supportedMediaTypes.add(MediaType.TEXT_XML);
//        return supportedMediaTypes;
//    }
//
//    /**
//     * 放开静态资源拦截
//     *
//     * @param registry
//     */
//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("swagger-ui.html")
//                .addResourceLocations("classpath:/META-INF/resources/");
//        registry.addResourceHandler("/webjars/**")
//                .addResourceLocations("classpath:/META-INF/resources/webjars/");
//        registry.addResourceHandler("/favicon.ico")
//                .addResourceLocations("classpath:/META-INF/resources/favicon.ico");
//        super.addResourceHandlers(registry);
//    }
//

//}

